#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,a[1010];
struct Num
{
	int len,num[3000];
	Num()
	{
		memset(num,0,sizeof(num));
		len=0;
	}
	int& operator[] (int x)
	{
		return num[x]; 
	}
	int operator[] (int x)const
	{
		return num[x];
	}
	Num operator* (int x)const
	{
		Num ret;
		int i;
		for(i=1;i<=len;++i)
		{
			ret[i]+=num[i]*x;
			ret[i+1]=ret[i]/10;
			ret[i]%=10;
		}
		if(!ret[i])--i;
		while(ret.num[i]>9)
		{
			ret[i+1]=ret[i]/10;
			ret[i++]%=10;
		}
		ret.len=i;
		return ret;
	}
	Num operator /(int x)const
	{
		Num ret;
		int temp=0,i=len;
		for(;i>=1;--i)
		{
			temp*=10;
			temp+=num[i];
			if(temp>=x)
			{
				if(!ret.len)ret.len=i;
				ret[i]=temp/x;
				temp%=x;
			}
		}
		return ret;
	}
}ans;
int main()
{
	scanf("%d",&n);
	int k1=n-2,k2=0;
	ans.len=ans[1]=1;
	for(int i=1;i<=n;++i)
	{
		scanf("%d",&a[i]);
		if(!a[i])
		{
			printf("0\n");
			return 0;
		}
		if(a[i]>0)--a[i];
		k2+=a[i];
	}
	if(k2>k1)
	{
		printf("0\n");
		return 0;
	}
	k2=0;
	for(int i=1;i<=n;++i)
	{
		int t=a[i];
		if(t==-1)
		{
			++k2;
			continue;
		}
		if(!t)continue;
		for(int j=k1;j>k1-t;--j)
			ans=ans*j;
		k1-=t;
		for(int j=1;j<=t;++j)
			ans=ans/j;
	}
	for(int i=1;i<=k1;++i)
		ans=ans*k2;
	for(int i=ans.len;i>=1;--i)
		printf("%d",ans[i]);
	puts("");
	return 0;
}
